package com.decent.manager.system.service.impl;

import com.decent.common.bo.MessageBean;
import com.decent.common.oss.enums.OssFolderEnum;
import com.decent.common.oss.util.OssUtil;
import com.decent.manager.system.dao.SystemBrandDao;
import com.decent.manager.system.dao.SystemGoodsDao;
import com.decent.manager.system.dto.SystemGoodsDTO;
import com.decent.manager.system.service.SystemGoodsService;
import com.decent.manager.system.vo.SystemGoodsVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import reactor.util.function.Tuple2;

import java.util.List;
import java.util.Objects;
import java.util.UUID;

/**
 * @author: decent Gjh
 * @date: 2022/10/25/18:35
 * @description:
 */
@Service
@Slf4j
public class SystemGoodsServiceImpl implements SystemGoodsService {
    private final SystemGoodsDao goodsDao;
    private final SystemBrandDao brandDao;

    public SystemGoodsServiceImpl(SystemGoodsDao goodsDao, SystemBrandDao brandDao) {
        this.goodsDao = goodsDao;
        this.brandDao = brandDao;
    }

    /**
     * 新建商品
     * @param goodsDTO 商品信息
     * @return 是否成功
     */
    @Override
    public MessageBean insertGoods(SystemGoodsDTO goodsDTO) {
        // 验证品牌是否存在
        if (brandDao.existBrand(goodsDTO.getBrandId())==0) {
            return MessageBean.fail("品牌不存在");
        }
        // 验证商品编号是否存在
        int num =goodsDao.verificationCode(goodsDTO.getCode());
        if (num<=0){
            return MessageBean.fail("商品编号存在错误");
        }
        // oss部分
        MultipartFile file = goodsDTO.getFile();
        String fileName = file.getOriginalFilename();
        String type="";
        // 提取文件后缀
        if (fileName!=null){
            type= Objects.requireNonNull(file.getOriginalFilename()).substring(fileName.lastIndexOf("."));
        }
        Tuple2<String, String> logo = OssUtil.submitFile(file, OssFolderEnum.BANNER, UUID.randomUUID()+type, true);
        goodsDTO.setImageUrl(logo.getT2());
        //插入
        goodsDao.insert(goodsDTO);
        return MessageBean.success();
    }

    /**
     * 删除商品
     * @param goodsDTO 商品信息
     * @return 是否成功
     */
    @Override
    public MessageBean deleteGoods(SystemGoodsDTO goodsDTO) {
        int rowNum = goodsDao.deleteGoods(goodsDTO.getId());
        return rowNum == 0 ? MessageBean.fail("删除失败,指定数据不存在"):MessageBean.success();
    }

    /**
     * 更新商品
     * @param goodsDTO 商品信息
     * @return 是否成功
     */
    @Override
    public MessageBean updateGoods(SystemGoodsDTO goodsDTO) {
        int rowNum = goodsDao.updateGoods(goodsDTO);
        return rowNum == 0 ? MessageBean.fail("更新失败"):MessageBean.success();
    }

    /**
     * 查找商品
     * @param goodsDTO 商品信息
     * @return 是否成功
     */
    @Override
    public MessageBean selectGoods(SystemGoodsDTO goodsDTO) {
        List<SystemGoodsVO> classifies = goodsDao.selectGoods(goodsDTO);
        if (classifies==null||classifies.isEmpty()) {
            return MessageBean.success("暂无数据");
        }
        return MessageBean.success(classifies);
    }

}
